package org.code.boot.service.boot;

import java.util.List;
import java.util.Map;
import java.util.Collection;
import org.code.boot.common.utils.CollectionUtils;
import org.code.boot.domain.boot.BizTrain;

/**
 * 火车信息Service接口
 * 
 * @author coder
 * @date 2025-08-28
 */
public interface IBizTrainService 
{
    /**
     * 查询火车信息
     * 
     * @param trainId 火车信息主键
     * @return 火车信息
     */
    public BizTrain selectBizTrainByTrainId(Long trainId);

    /**
     * 查询火车信息列表
     * 
     * @param bizTrain 火车信息
     * @return 火车信息集合
     */
    public List<BizTrain> selectBizTrainList(BizTrain bizTrain);

    /**
     * 新增火车信息
     * 
     * @param bizTrain 火车信息
     * @return 结果
     */
    public int insertBizTrain(BizTrain bizTrain);

    /**
     * 修改火车信息
     * 
     * @param bizTrain 火车信息
     * @return 结果
     */
    public int updateBizTrain(BizTrain bizTrain);

    /**
     * 批量删除火车信息
     * 
     * @param trainIds 需要删除的火车信息主键集合
     * @return 结果
     */
    public int deleteBizTrainByTrainIds(Long[] trainIds);

    /**
     * 删除火车信息信息
     * 
     * @param trainId 火车信息主键
     * @return 结果
     */
    public int deleteBizTrainByTrainId(Long trainId);
    /**
     * 获得火车信息列表
     *
     * @param ids 火车信息编号数组
     * @return 火车信息列表
     */
    List<BizTrain> getBizTrainList(Collection<Long> ids);

    /**
     * 获得火车信息 Map
     *
     * @param ids 火车信息编号数组
     * @return 火车信息 Map
     */
    default Map<Long, BizTrain> getBizTrainMap(Collection<Long> ids) {
        return org.code.boot.common.utils.CollectionUtils.convertMap(getBizTrainList(ids), BizTrain::getTrainId);
    }

    /**
     * 计算火车总可用座位数
     * 
     * @param trainId 火车ID
     * @return 总可用座位数
     */
    public Integer getTotalAvailableSeats(Long trainId);

}
